package multiThread.communication;

/**
 * @projectName: java-sample
 * @description:
 * @author: Adam
 * @create: 2019-12-30 21:28
 **/

/**
 * Object类提供了三个方法，wait(),notify(),notifyAll(),这三个方法必须由同步监视器来调用
 * synchnoized修饰的同步方法因为该类的实例this默认同步监视器，所以可以在同步方法中直接调用这三个方法
 * synchnoized修饰的同步代码块，同步监视器是synchronized后的括号里的对象，所以必须使用该对象调用这三个方法
 * wait():导致当前线程等待，直到其他线程调用该同步监视器的notify()方法或notifyAll()发方法来唤醒该线程。调用wait()会释放对该同步监视器的锁定s.
 * notify():唤醒在此监视器上等待的单个线程。如果所有的线程都在此同步监视器上等待，则会选择唤醒其中的一个线程（随机）,只有当前线程放弃对该同步监视器的锁定后
 * (使用了wait()方法)，才可以执行被唤醒的线程。
 * notifyAll():唤醒在此同步监视器上等待的所有线程。
 *
 * 如果使用Lock对象保证同步，则系统不存在隐式的同步监视器，则使用Condition类来保持协调,使用condition可以让那些已经得到Lock对象却无法继续执行的线程释放
 * Lock对象，Conditon对象也可以唤醒其他处于等待的线程.
 */
public class demo {
}
